Ext.define('YX.core.SysUser', {
	extend : 'Ext.panel.Panel',
	layout : {
		type : 'border',
		align : 'stretch'
	},
	frmUser : null,
	btnSave : null,
	btnHold : null,
	btnReset : null,
	btnSearch : null,
	txtOrgCode : null,
	txtUserNo : null,
	txtUserDesc : null,
	txtUserPwd : null,
	cmbSecGroup : null,
	cmbSex : null,
	txtEmail : null,
	txtMobile : null,
	txtPhone : null,
	cmbDept : null,
	txtIdCard : null,
	dateAccountExpire : null,
	datePwdExpire : null,
	txtAddress : null,
	gridUser : null,
	txtSearchUserNo : null,
	cmbSearchStatus : null,
	cmbSearchSecGroup : null,
	frmSearch : null,
	initComponent : function() {
		//中间表单元素
		this.txtOrgCode = Ext.create('Ext.form.field.Text', {
			  fieldLabel : T.label.organization,
			  labelWidth : 60,
			  name : 'orgCode',
			  value : LoginInfo.ORGCODE,
			  readOnly : true
		  });

		this.txtUserNo = Ext.create('Ext.form.field.Text', {
			  labelWidth : 60,
			  fieldLabel : T.label.account,
			  name : 'userId',
			  maxLength : 20,
			  allowBlank : false
		  });

		this.txtUserDesc = Ext.create('Ext.form.field.Text', {
			  labelWidth : 60,
			  fieldLabel : T.label.userName,
			  name : 'userDesc',
			  maxLength : 30
		  });

		this.txtUserPwd = Ext.create('Ext.form.field.Text', {
			  labelWidth : 60,
			  fieldLabel : T.label.password,
			  name : 'userPwd',
			  maxLength : 20,
			  inputType : 'password'
		  });

		this.cmbSecGroup = Ext.create('Ext.form.field.ComboBox', {
			  labelWidth : 60,
			  fieldLabel : T.label.securityGroup,
			  name : 'secRoleCode',
			  editable : false,
			  valueField : 'secRoleCode',
			  displayField : 'secRoleName',
			  store : {
				  autoLoad : false,
				  fields : ['secRoleCode', 'secRoleName'],
				  proxy : {
					  type : 'zbusrpc',
					  module : 'SecViewSecurityRoleListService',
					  reader : {
						  root : 'roleList'
					  }
				  }
			  }
		  });

		this.cmbSex = Ext.create('Ext.form.field.ComboBox', {
			  fieldLabel : T.label.sex,
			  labelWidth : 60,
			  name : 'sex',
			  displayField : 'text',
			  valueField : 'value',
			  editable : false,
			  value : 'M',
			  store : Ext.create('Ext.data.ArrayStore', {
				    fields : ['value', 'text'],
				    data : [['M', T.label.male], ['F', T.label.female]]
			    })
		  });

		this.txtEmail = Ext.create('Ext.form.field.Text', {
			  labelWidth : 60,
			  fieldLabel : T.label.email,
			  name : 'email',
			  maxLength : 50,
			  vtype : 'email'
		  });
		this.txtMobile = Ext.create('Ext.form.field.Text', {
			  labelWidth : 60,
			  fieldLabel : T.label.mobile,
			  name : 'mobile',
			  maxLength : 15
		  });
		this.txtPhone = Ext.create('Ext.form.field.Text', {
			  labelWidth : 60,
			  fieldLabel : T.label.phone,
			  name : 'phone',
			  maxLength : 10
		  });
		this.cmbDept = Ext.create('Ext.form.field.ComboBox', {
			  fieldLabel : T.label.department,
			  labelWidth : 60,
			  name : 'dept',
			  displayField : 'text',
			  valueField : 'value',
			  editable : true,
			  store : Ext.create('Ext.data.ArrayStore', {
				    fields : ['value', 'text'],
				    data : []
			    })
		  });
		this.txtIdCard = Ext.create('Ext.form.field.Text', {
			  labelWidth : 60,
			  fieldLabel : T.label.idNumber,
			  name : 'idNumber',
			  maxLength : 20
		  });
		this.dateAccountExpire = Ext.create('Ext.form.field.Date', {
			  labelWidth : 60,
			  fieldLabel : T.label.expireDate,
			  name : 'accountExpireDate',
			  format : 'Y-m-d'
		  });
		this.datePwdExpire = Ext.create('Ext.form.field.Date', {
			  labelWidth : 60,
			  fieldLabel : T.label.passwordExpireDate,
			  name : 'pwdExpireDate',
			  format : 'Y-m-d',
			  submitFormat : 'YmdHis'
		  });
		this.txtAddress = Ext.create('Ext.form.field.Text', {
			  labelWidth : 60,
			  fieldLabel : T.label.address,
			  name : 'address',
			  maxLength : 100
		  });

		//中间表单
		this.frmUser = Ext.create('Ext.form.Panel', {
			  items : [{
				    xtype : 'fieldcontainer',
				    defaults : {
					    flex : 1,
					    cls : 'marginL2'
				    },
				    layout : {
					    type : 'hbox',
					    align : 'stretch',
					    flex : 1
				    },
				    items : [this.txtOrgCode, this.txtUserNo, this.txtUserDesc]
			    }, {
				    xtype : 'fieldcontainer',
				    defaults : {
					    flex : 1,
					    cls : 'marginL2'
				    },
				    layout : {
					    type : 'hbox',
					    align : 'stretch',
					    flex : 1
				    },
				    items : [this.txtUserPwd, this.cmbSecGroup, this.cmbSex]
			    }, {
				    xtype : 'fieldcontainer',
				    defaults : {
					    flex : 1,
					    cls : 'marginL2'
				    },
				    layout : {
					    type : 'hbox',
					    align : 'stretch'
				    },
				    items : [this.txtEmail, this.txtMobile, this.txtPhone]
			    }, {
				    xtype : 'fieldcontainer',
				    defaults : {
					    flex : 1,
					    cls : 'marginL2'
				    },
				    layout : {
					    type : 'hbox',
					    align : 'stretch'
				    },
				    items : [this.cmbDept, this.txtIdCard, this.dateAccountExpire]
			    }, {
				    xtype : 'fieldcontainer',
				    defaults : {
					    flex : 1,
					    cls : 'marginL2'
				    },
				    layout : {
					    type : 'hbox',
					    align : 'stretch'
				    },
				    items : [this.datePwdExpire, this.txtAddress, {
					      xtype : 'displayfield'
				      }]
			    }]
		  });

		//人员grid list
		this.gridUser = Ext.create('Ext.grid.Panel', {
			  flex : 1,
			  columns : [{
				    text : T.label.account,
				    dataIndex : 'userId',
				    width : 110
			    }, {
				    text : T.label.userName,
				    dataIndex : 'userDesc',
				    width : 120
			    }, {
				    text : T.label.securityGroup,
				    dataIndex : 'secRoleCode',
				    width : 100
			    }, {
				    text : T.label.status,
				    dataIndex : 'status',
				    width : 80,
				    renderer : function(value) {
					    return value === 'N' ? T.label.normal : T.label.lock;
				    }
			    }, {
				    xtype : 'datecolumn',
				    format : 'Y-m-d H:i:s',
				    text : T.label.createTime,
				    dataIndex : 'createDate',
				    width : 130
			    }, {
				    text : T.label.createUser,
				    dataIndex : 'createUserId',
				    width : 80
			    }, {
				    xtype : 'datecolumn',
				    format : 'Y-m-d H:i:s',
				    text : T.label.updateTime,
				    dataIndex : 'updateDate',
				    width : 130
			    }, {
				    text : T.label.updateUser,
				    dataIndex : 'updateUserId',
				    width : 80
			    }],
			  store : {
				  xtype : 'json',
				  fields : ['orgCode', 'userId', 'userDesc', 'secRoleCode', 'status',
				    'email', 'mobile', 'phone', 'sex', 'dept', {
					    name : 'birthday',
					    type : 'date',
					    dateFormat : 'YmdHis'
				    }, 'idNumber', 'address', {
					    name : 'accountExpireDate',
					    type : 'date',
					    dateFormat : 'YmdHis'
				    }, {
					    name : 'pwdExpireDate',
					    type : 'date',
					    dateFormat : 'YmdHis'
				    }, {
					    name : 'createDate',
					    type : 'date',
					    dateFormat : 'YmdHis'
				    }, 'createUserId', {
					    name : 'updateDate',
					    type : 'date',
					    dateFormat : 'YmdHis'
				    }, 'updateUserId'],
				  proxy : {
					  type : 'zbusrpc',
					  module : 'SecViewUserInfoService',
					  reader : {
						  root : 'userList'
					  }
				  }
			  },
			  listeners : {
				  scope : this,
				  select : this.onGridUserSelect
			  }
		  });

		//中间表单下工具栏按钮
		this.btnSave = Ext.create('Ext.button.Button', {
			  text : T.label.save,
			  itemId : 'btnSave',
			  iconCls : 'icon-disk',
			  scope : this,
			  handler : this.onBtnSaveClicked
		  });
		this.btnHold = Ext.create('Ext.button.Button', {
			  text : T.label.lock,
			  itemId : 'btnHold',
			  iconCls : 'icon-lock',
			  scope : this,
			  handler : this.onBtnHoldClicked
		  });
		this.btnReset = Ext.create('Ext.button.Button', {
			  text : T.label.reset,
			  itemId : 'btnReset',
			  iconCls : 'icon-clear',
			  scope : this,
			  handler : this.onBtnResetClicked
		  });

		//右侧表单查询元素
		this.txtSearchUserNo = Ext.create('Ext.form.field.Text', {
			  fieldLabel : T.label.account,
			  labelWidth : 60
		  });
		this.cmbSearchStatus = Ext.create('Ext.form.field.ComboBox', {
			  fieldLabel : T.label.status,
			  labelWidth : 60,
			  displayField : 'text',
			  valueField : 'value',
			  editable : false,
			  store : Ext.create('Ext.data.ArrayStore', {
				    fields : ['value', 'text'],
				    data : [[' ', ' '], ['N', T.label.normal], ['H', T.label.lock]]
			    })
		  });
		this.cmbSearchSecGroup = Ext.create('Ext.form.field.ComboBox', {
			  labelWidth : 60,
			  fieldLabel : T.label.securityGroup,
			  name : 'secRoleCode',
			  editable : false,
			  valueField : 'secRoleCode',
			  displayField : 'secRoleName',
			  store : {
				  xtype : 'json',
				  autoLoad : false,
				  fields : ['secRoleCode', 'secRoleName'],
				  proxy : {
					  type : 'zbusrpc',
					  module : 'SecViewSecurityRoleListService',
					  reader : {
						  root : 'roleList'
					  }
				  }
			  }
		  });

		this.btnSearch = Ext.create('Ext.button.Button', {
			  text : T.label.search,
			  itemId : 'btnSearch',
			  iconCls : 'icon-find',
			  scope : this,
			  handler : this.onBtnSearchClicked
		  });

		this.frmSearch = Ext.create('Ext.form.Panel', {
			region : 'east',
			split : true,
			width : 270,
			minWidth : 270,
			defaults : {
				anchor : '98%'
			},
			items : [this.txtSearchUserNo, this.cmbSearchStatus, this.cmbSearchSecGroup],
			buttons : [this.btnSearch]
		});

		this.items = [{
			  xtype : 'panel',
			  region : 'center',
			  layout : {
				  type : 'vbox',
				  align : 'stretch'
			  },
			  items : [{
				    xtype : 'toolbar',
				    items : [this.btnSave, this.btnHold, this.btnReset]
			    }, this.frmUser, this.gridUser, {
				    xtype : 'pagingtoolbar',
				    store : this.gridUser.getStore()
			    }]
		  }, this.frmSearch];

		//this.cmbSecGroup.getStore().on('beforeLoad', this.onCmbSecGroupStoreBeforeLoad, this);
		this.cmbSearchSecGroup.getStore().on('load',
		  this.onCmbSearchSecGroupStoreLoad, this);

		this.callParent();
	},
	onCmbSecGroupStoreBeforeLoad : function(store, operation) {
		Ext.apply(operation.params, {
			  orgCode : this.txtOrgCode.getValue()
		  });
	},
	onCmbSearchSecGroupStoreLoad : function(store, records, success) {
		if (success && store.getCount() > 0) {
			store.insert(0, [{
				    secRoleCode : ' ',
				    secRoleName : ' '
			    }]);
		}
	},
	onBtnSaveClicked : function(btn) {
		if (!this.frmUser.getForm().isValid()) {
			return;
		}

		Ext.Msg.show({
			  title : T.label.save,
			  msg : T.msg.are_you_sure_to_save_data,
			  icon : Ext.Msg.QUESTION,
			  buttons : Ext.Msg.YESNO,
			  scope : this,
			  fn : function(btnId) {
				  if (btnId == 'yes') {
					  btn.disable();
					  this.saveUser(btn);
				  }
			  }
		  });
	},
	saveUser : function(btn) {
		var frmVals = this.frmUser.getValues();
		var parms = [];
		parms.push(frmVals);

		YX.ZbusRpc.request({
			  module : 'SecSaveUserInfoService',
			  scope : this,
			  showSuccess : true,
			  params : {
				  userList : parms
			  },
			  callback : function() {
				  btn.enable();
			  },
			  success : function() {
				  this.gridUser.getStore().reload();
			  }
		  });
	},
	onBtnHoldClicked : function(btn) {
		var frmVals = this.frmUser.getValues();
		if (Ext.isEmpty(frmVals.userId)) {
			return;
		}

		Ext.Msg.show({
			  title : T.label.save,
			  msg : T.msg.are_you_sure_to_save_data,
			  icon : Ext.Msg.QUESTION,
			  buttons : Ext.Msg.YESNO,
			  scope : this,
			  fn : function(btnId) {
				  if (btnId == 'yes') {
					  btn.disable();
					  this.holdUser(btn);
				  }
			  }
		  });
	},
	holdUser : function(btn) {
		var frmVals = this.frmUser.getValues();

		YX.ZbusRpc.request({
			  module : 'SecHoldUserInfoService',
			  scope : this,
			  showSuccess : true,
			  params : {
				  orgCode : frmVals.orgCode,
				  userId : frmVals.userId,
				  holdFlag : 'Y'
			  },
			  callback : function() {
				  btn.enable();
			  },
			  success : function() {
				  this.gridUser.getStore().reload();
			  }
		  });
	},
	onBtnResetClicked : function() {
		this.frmUser.getForm().reset();
	},
	onBtnSearchClicked : function() {
		var proxy = this.gridUser.getStore().getProxy();
		proxy.setExtraParam('userId', this.txtSearchUserNo.getValue());
		proxy.setExtraParam('secRoleCode', this.cmbSearchSecGroup.getValue());
		proxy.setExtraParam('status', this.cmbSearchStatus.getValue());
		this.gridUser.getStore().loadPage(1);
	},
	onGridUserSelect : function(grid, record, e) {
		this.frmUser.loadRecord(record);
	}
});
